import 'package:flutter/material.dart';
import 'dart:math' as math;

class StackTest extends StatefulWidget {
  @override
  _StackTestState createState() => _StackTestState();
}

class _StackTestState extends State<StackTest> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('stack')),
      body: Center(
        // Container尺寸
        // 有child就包裹住child 除非child需要对齐 即Alignment
        // 没有child就越大越好   除非约束无边界 如父级是 Column-hight Row-width等
        child: Container(
          color: Colors.orange,
          // width: 300,
          // height: 300,
          child: Column(
            children: [
              // Text('data'),
              // Container(
              //   margin: EdgeInsets.all(100),
              //   // padding: EdgeInsets.all(100),
              //   color: Colors.pink,
              //   alignment: Alignment.center,
              //   child: Text('data'),
              //   height: 200,
              //   width: 100,
              // ),
              LayoutBuilder(
                  builder: (BuildContext context, BoxConstraints constraints) {
                print(constraints); //当前控件大小
                return LimitedBox(
                  maxHeight: 100, // 如果是父级给搞度的约束是无穷大的时候 使用maxHeight  如Column 就用
                  maxWidth: 100, // 如果是父级给宽度的约束是无穷大的时候 使用maxWidth    如Row 就用
                  child: Container(
                    color: Colors.green,
                    // width: 10,
                  ),
                );
              }),
              StackTestWidget()
            ],
          ),
        ),
      ),
    );
  }
}

class StackTestWidget extends StatefulWidget {
  @override
  _StackTestWidgetState createState() => _StackTestWidgetState();
}

class _StackTestWidgetState extends State<StackTestWidget> {
  double i = 0;
  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.amber,
      constraints: BoxConstraints(
          maxHeight: 300, maxWidth: 350, minHeight: 80, minWidth: 80),
      child: Stack(
        // 松约束  StackFit.loose  松约束 和 紧约束  不是对立的
        // 适用上下级 StackFit.expand
        // 向下传递上级约束 StackFit.passthrough
        fit: StackFit.loose,
        // 超出父视图是否切掉
        // Clip.none 不切
        // Clip.hardEdge 默认 裁剪但不应用抗锯齿，裁剪速度比none模式慢一点，但比其他方式快。
        // Clip.antiAlias  裁剪而且抗锯齿，以实现更平滑的外观。裁剪速度比antiAliasWithSaveLayer快，比hardEdge慢
        // Clip.antiAliasWithSaveLayer 带有抗锯齿的剪辑，并在剪辑之后立即保存saveLayer。
        clipBehavior: Clip.antiAliasWithSaveLayer,
        children: [
          // Container(color: Colors.pink
          Container(
            width: 500,
            height: 260,
            color: Colors.red,
          ),
          Positioned(child: Text('data')),
          Positioned(
              width: 200,
              child: Transform.rotate(
                  angle: math.pi / 4,
                  child: ElevatedButton(
                      onPressed: () {
                        print('点击外边不响应---按钮----');
                      },
                      child: Text('点击外边不响应-按钮')))),
          Positioned(
              top: i,
              right: 0,
              width: 150,
              child: Transform.rotate(
                  angle: math.pi / 3,
                  child: ElevatedButton(
                      onPressed: () {
                        print('切边');
                        setState(() {
                          i = -10;
                        });
                      },
                      child: Text('点击切边'))))
        ],
      ),
    );
  }
}
